package iface.aplicativo.apresentacao.controle;

import iface.aplicativo.excecao.MensagemException;
import iface.aplicativo.negocio.aps.ManterUsuariosAPS;
import iface.aplicativo.negocio.entidade.Perfil;
import iface.aplicativo.negocio.entidade.Usuario;
import iface.aplicativo.util.BeanAbstrato;
import iface.arquitetura.utilitario.ListaTO;

import java.io.Serializable;
import java.util.Collection;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class ManterUsuariosBean extends BeanAbstrato implements Serializable {

	private static final long serialVersionUID = 4285899560377776076L;

	private Usuario usuario;
	private Usuario usuarioAux;

	@ManagedProperty(value = "#{manterUsuariosAPS}")
	private ManterUsuariosAPS service;

	public void setService(ManterUsuariosAPS service) {
		this.service = service;
	}

	public Collection<Usuario> getTodosUsuarios() throws Exception {
		return this.service.getTodosUsuarios();
	}

	public Collection<ListaTO> getTodosPerfis() {
		return this.service.getTodosPerfis();
	}

	public void salvarUsuario() throws Exception {

		try {
			String msg = this.service.salvarUsuario(this.getUsuario());
			this.limparCampos();

			this.setMensagem(msg, MSG_TIPO_INFORMACAO, "");
		} catch (final MensagemException e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_AVISO, "");
		} catch (final Exception e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_ERRO, "");
		}
	}

	public void excluirUsuario() throws Exception {

		try {
			String msg = this.service.excluirUsuario(this.getUsuarioAux());

			this.limparCampos();

			this.setMensagem(msg, MSG_TIPO_INFORMACAO, "");
		} catch (final MensagemException e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_AVISO, "");
		} catch (final Exception e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_ERRO, "");
		}
	}

	public void limparCampos() {
		this.setUsuario(null);
		this.setUsuarioAux(null);
	}

	public Usuario getUsuario() {
		if (usuario == null) {
			usuario = new Usuario();
			usuario.setPerfil(new Perfil());
		}
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Usuario getUsuarioAux() {
		if (usuarioAux == null) {
			usuarioAux = new Usuario();
			usuarioAux.setPerfil(new Perfil());
		}
		return usuarioAux;
	}

	public void setUsuarioAux(Usuario usuarioAux) {
		this.usuarioAux = usuarioAux;
	}

}
